// package com.hu.auth.common.security;
//
// import com.hu.auth.common.result.R;
// import com.hu.auth.common.result.RCodeEnum;
// import com.hu.auth.common.utils.JwtUtil;
// import com.hu.auth.common.utils.ResponseUtil;
// import com.hu.auth.service.UserService;
// import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
// import org.springframework.security.core.GrantedAuthority;
// import org.springframework.security.core.authority.SimpleGrantedAuthority;
// import org.springframework.security.core.context.SecurityContextHolder;
// import org.springframework.util.StringUtils;
// import org.springframework.web.filter.OncePerRequestFilter;
//
// import javax.annotation.Resource;
// import javax.servlet.FilterChain;
// import javax.servlet.ServletException;
// import javax.servlet.http.HttpServletRequest;
// import javax.servlet.http.HttpServletResponse;
// import java.io.IOException;
// import java.util.ArrayList;
// import java.util.Collections;
// import java.util.List;
//
// public class TokenFilter extends OncePerRequestFilter {
//
//     @Resource
//     UserService userService;
//
//     public TokenFilter() {
//     }
//
//     @Override
//     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
//             throws IOException, ServletException {
//         logger.info("uri:" + request.getRequestURI());
//         //如果是登录接口，直接放行
//         if ("/user/login".equals(request.getRequestURI())) {
//             chain.doFilter(request, response);
//             return;
//         }
//
//         // if("/prod-api/admin/login".equals(request.getRequestURI())) {
//         //     chain.doFilter(request, response);
//         //     return;
//         // }
//
//         UsernamePasswordAuthenticationToken authentication = getAuthentication(request);
//         if (null != authentication) {
//             SecurityContextHolder.getContext().setAuthentication(authentication);
//             chain.doFilter(request, response);
//         } else {
//             ResponseUtil.out(response, R.data(null, RCodeEnum.PERMISSION));
//         }
//     }
//
//     private UsernamePasswordAuthenticationToken getAuthentication(HttpServletRequest request) {
//         // token置于header里
//         String token = request.getHeader("token");
//         if (!StringUtils.isEmpty(token)) {
//             String useruame = JwtUtil.getUsername(token);
//             if (!StringUtils.isEmpty(useruame)) {
//                 // String authoritiesString =
//                 //         (String) redisTemplate.opsForValue().get(useruame);
//                 // List<Map> mapList = JSON.parseArray(authoritiesString, Map.class);
//                 // List<SimpleGrantedAuthority> authorities = new ArrayList<>();
//                 // for (Map map : mapList) {
//                 //     authorities.add(new SimpleGrantedAuthority((String)map.get("authority")));
//                 // }
//                 List<String> buttons = (List<String>) userService.info(JwtUtil.getUserId(token)).get("buttons");
//                 List<GrantedAuthority> authList = new ArrayList<>();
//                 for (String button : buttons) {
//                     authList.add(new SimpleGrantedAuthority(button.trim()));
//                 }
//                 return new UsernamePasswordAuthenticationToken(useruame, null, authList);
//             }
//         }
//         return null;
//     }
// }
